package yingyong;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

/*
       方法引用（引用构造方法）
       格式
               类名::new

       目的：
               创建这个类的对象

       需求：
            集合里面存储姓名和年龄，要求封装成Student对象并收集到List集合中

       方法引用的规则：
           1.需要有函数式接口
           2.被引用的方法必须已经存在
           3.被引用方法的形参和返回值，需要跟抽象方法的形参返回值保持一致
           4.被引用方法的功能需要满足当前的需求
      */
public class demo5 {
    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "张三,18", "李四,22", "王五,25");
        //1.匿名内部类方法
        list.stream().map(new Function<String, Student>() {
            @Override
            public Student apply(String s) {
                String name = s.split(",")[0];
                int age = Integer.parseInt(s.split(",")[1]);
                return new Student(name, age);
            }
        }).forEach(s -> System.out.println(s));
        System.out.println("---------------");
        //2.lambda方法
        list.stream().map(s-> new Student(s.split(",")[0],Integer.parseInt(s.split(",")[1]))).forEach(s -> System.out.println(s));
        System.out.println("---------------");
        // 3.方法引用（引用构造方法）
      /*  格式
        类名::new*/
        List<Student> newlist = list.stream().map(Student::new).collect(Collectors.toList());
        System.out.println(newlist);
    }
}
